package model

// Item 代表作品信息
type Item struct {
	DCI string `gorm:"primarykey;type:varchar(90);comment:'作品数字指纹'"`
	// 作品信息
	Name        string `gorm:"type:varchar(30);not null;comment:'作品名称'"`
	Description string `gorm:"type:varchar(90);comment:'作品描述'"`
	Category    string `gorm:"type:varchar(10);comment:'作品类型'"` // 作品类型 other:其他 text:文本 video:视频 image:图片
	FileName    string `gorm:"type:varchar(90);comment:'文件名'"`
	FileSize    uint   `gorm:"comment:'文件大小'"`
	FileType    string `gorm:"type:varchar(30);comment:'文件类型'"`

	TokenURI string `gorm:"type:varchar(120);comment:'作品资源地址'"`
	TokenID  uint64 `gorm:"comment:'作品链上ID'"`

	CreatorAddress string  `gorm:"index;comment:'作品创建者地址'"`
	Creator        Account `gorm:"references:Address;foreignKey:CreatorAddress"`

	OwnerAddress string  `gorm:"index;comment:'作品拥有者地址'"`
	Owner        Account `gorm:"references:Address;foreignKey:OwnerAddress"`

	ContractAddress string `gorm:"type:varchar(90);comment:'合约地址'"` // 用于处理将作品转移至交易合约的情况
	ApprovalAddress string `gorm:"type:varchar(90);comment:'授权地址'"` // 用于作品的授权操作的目标地址

	CreateTxHash string    `gorm:"type:varchar(90);comment:'创建作品事件的交易哈希'"` // 用于记录创建作品的交易事件
	Create       ItemEvent `gorm:"references:TxHash;foreignKey:CreateTxHash"`

	TransferTxHash string    `gorm:"type:varchar(90);comment:'最近一次作品转移的交易哈希'"` // 记录最近一次发生的作品转移事件
	Transfer       ItemEvent `gorm:"references:TxHash;foreignKey:TransferTxHash"`
}

// ItemEvent 代表作品链上流转操作的事件历史记录
type ItemEvent struct {
	TxHash      string `gorm:"primarykey;type:varchar(90);comment:'交易哈希'"`
	DCI         string `gorm:"type:varchar(90);index;not null;comment:'作品数字指纹'"`
	TokenID     uint64 `gorm:"not null;comment:'作品链上tokenID'"`
	From        string `gorm:"type:varchar(90);not null;comment:'发起方'"`
	To          string `gorm:"type:varchar(90);comment:'接收方'"`
	EventName   string `gorm:"type:varchar(10);not null;comment:'事件类型'"` // 类型 create:创建 transfer:转移 approval:授权
	BlockNumber uint64 `gorm:"not null;comment:'区块高度'"`
	BlockTime   uint64 `gorm:"not null;comment:'区块时间'"`
}
